#include"ftpServer.h"
#include<pthread.h>


void Usage(const char *filename)
{
	printf("Usage: %s server_ip server_port\n",filename);
}

void* handler_msg(void *arg)
{
//pthread_detach()即主线程与子线程分离，子线程结束后，资源自动回收。
//int pthread_detach(pthread_t tid);
	pthread_detach(pthread_self());//pthread_self()获取本进程自身的 ID, 在这里也就是子线程的ID
	int sock=(int)arg;  //类型转换
	ftpserver_process(sock);
	close(sock);
	return NULL;
}

int main(int argc,char* argv[])
{
	if(argc!=3)
	{
		Usage(argv[0]);
		return -1;
	}

    //create a socket
	int sock=socket_create(argv[1],atoi(argv[2]));
	
	while(1)
	{
		int connf=socket_accept(sock);
		if(connf<0)
		{
			continue;
		}
		//pthread_t 就是 unsigned long int，在本系统下占8字节，即为uint64_t。因此打印线程ID需要用 %lu 格式。
		/*
		int pthread_create(
                         pthread_t *restrict tidp,   //新创建的线程ID指向的内存单元。
                         const pthread_attr_t *restrict attr,  //线程属性，默认为NULL
                         void *(*start_rtn)(void *), //新创建的线程从start_rtn函数的地址开始运行
                         void *restrict arg //默认为NULL。若上述函数需要参数，将参数放入结构中并将地址作为arg传入。
                          );
		*/
		pthread_t tid;
		pthread_create(&tid,NULL,handler_msg,(void*)connf);//handler_msg 回调函数  传入(void*)无类型指针类型
	}
	//关闭线程
	close(sock);
	return 0;
}





